package com.yxinsur.imc.business.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxinsur.imc.business.domain.ImcContractExpenseExpression;
import com.yxinsur.imc.business.domain.ImcContractVariable;
import com.yxinsur.imc.business.domain.ImcContractVariableStrategy;
import com.yxinsur.imc.business.vo.ContractExpenseExpressionVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 协议费用科目对应口径
 *
 * @author imc
 * @date 2021-07-28
 */
@Mapper
public interface ImcContractExpenseExpressionMapper extends BaseMapper<ImcContractExpenseExpression> {
    /**
     * 根据{协议费用科目ID}查询协议费用科目口径列表
     *
     * @param contractExpenseId 协议费用科目ID
     * @param tenantId          租户ID
     * @return List<ContractExpenseExpressionVo>
     */
    List<ContractExpenseExpressionVo> listExpenseExpressionVoByContractExpenseId(@Param("contractExpenseId") Long contractExpenseId, @Param("tenantId") Long tenantId);

    /**
     * 保存协议费用科目对应口径
     *
     * @param imcContractExpenseExpression 协议-费用科目对应口径（暨口径表达式配置）
     * @return 结果
     */
    int insertImcContractExpenseExpression(ImcContractExpenseExpression imcContractExpenseExpression);

    /**
     * 逻辑删除协议费用科目对应口径
     *
     * @param contractExpenseId 协议费用科目id
     * @return 结果
     */
    int deleteExpressionByContractExpenseId(@Param("contractExpenseId") Long contractExpenseId);

    /**
     * 根据{口径字段名称}查询协议口径
     *
     * @param variableName 口径字段名称
     * @return 协议-口径
     */
    ImcContractVariable selectImcContractVariableByName(@Param("variableName") String variableName);

    /**
     * 根据{处理策略代码}查询处理策略
     *
     * @param strategyCode 处理策略代码
     * @return 处理策略
     */
    ImcContractVariableStrategy selectImcContractVariableStrategyByCode(@Param("strategyCode") String strategyCode);

    /**
     * 根据{口径变量ID}查询协议口径变量
     *
     * @param id 口径变量ID
     * @return 协议口径变量
     */
    ImcContractVariable selectImcContractVariableById(@Param("id") Long id);

    /**
     * 根据{处理策略id}查询处理策略
     *
     * @param id 处理策略id
     * @return 处理策略
     */
    ImcContractVariableStrategy selectImcContractVariableStrategyById(@Param("id") Long id);

    /**
     * 根据{协议费用科目口径表达式ID}查询口径表达式
     *
     * @param id 协议费用科目口径表达式ID
     * @return 口径表达式
     */
    ImcContractExpenseExpression getExpressionById(@Param("id") Long id);

    /**
     * 口径变量-查询列表
     *
     * @return List<ImcContractVariable>
     */
    List<ImcContractVariable> listVariable();

    /**
     * 处理策略-查询列表
     *
     * @return List<ImcContractVariableStrategy>
     */
    List<ImcContractVariableStrategy> listStrategy();
}
